package com.example.a_base

/**
@author whd
@date 2023/10/21 14:55:01
 */
/*
    return。默认从最直接包围它的函数或者匿名函数返回。
    break。终止最直接包围它的循环。
    continue。继续下一次最直接包围它的循环。
*/
class f_fanhui {
  fun foo() {
    listOf(1, 2, 3, 4, 5).forEach {
      if (it == 3) return // 非局部直接返回到 foo() 的调用者
      print(it)
    }
    println("this point is unreachable")
  }//输出12
  fun foo1() {
    listOf(1, 2, 3, 4, 5).forEach lit@{
      if (it == 3) return@lit // 局部返回到该 lambda 表达式的调用者，即 forEach 循环
      print(it)
    }
    print(" done with explicit label")
  }//输出1245done with explicit label
  fun foo2() {
    listOf(1, 2, 3, 4, 5).forEach {
      if (it == 3) return@forEach // 局部返回到该 lambda 表达式的调用者，即 forEach 循环
      print(it)
    }
    print(" done with implicit label")
  }//输出同上
  fun foo3() {
    listOf(1, 2, 3, 4, 5).forEach(fun(value: Int) {
      if (value == 3) return  // 局部返回到匿名函数的调用者，即 forEach 循环
      print(value)
    })
    print(" done with anonymous function")
  }//输出同上
  fun foo4() {
    run loop@{
      listOf(1, 2, 3, 4, 5).forEach {
        if (it == 3) return@loop // 从传入 run 的 lambda 表达式非局部返回
        print(it)
      }
    }
    print(" done with nested loop")
  }
}
